<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="renderer" content="webkit">
  <meta charset="utf-8">

  <title>seajs学习</title>

  <script type="text/javascript" src="/lib/jquery-1.12.1.js"></script>
  <script type="text/javascript" src="/lib/seajs-2.1.1.js"></script>
</head>
<body>

<script>
  var log = function() {
    console.log.apply(null, arguments);
  };
  var debug = function(message, data) {
    console.log('>>>> ', message, ' >>>>');
    console.log('typeof data => ', typeof data);
    console.log(data);
    console.log('<<<< ', message, ' <<<<\n\n');
  };


  // log(seajs);
  // 没有下面的config时
  // base: "http://www.seajs.dakala/lib/"
  // charset: "utf-8"
  // cid: function cid()
  // cwd: "http://www.seajs.dakala/"
  // dir: "http://www.seajs.dakala/lib/"
  // events: Object {  }
  // fetchedList: Object { "http://www.seajs.dakala/lib/test/a.js": true }
  // preload: Array []
  

  // 获取包括 . 的扩展名，比如 .js；
  function getExtensionIncludeDot(url) {
    var lastDotIndex = url.lastIndexOf('.');
    return lastDotIndex > 0 ? url.substr(lastDotIndex) : '';
  }

  // 指定某个扩展名的模块去哪里下载
  var path = {
    '.js': 'js',
    'css': 'css',
    '.html': 'tpl'
  };


  seajs.config({
    base: '/modules',
    // map必须是一个数组，即使只有一个元素；
    map: [function(url) {
      debug('seajs.config.map 参数url', url);// http://www.seajs.dakala/modules/test/a.js
      // log(seajs.data.base); // http://www.seajs.dakala/modules/
      
      return seajs.data.base + path[getExtensionIncludeDot(url)] + url.substr(seajs.data.base.length - 1);
    }]
  });
  // base: "http://www.seajs.dakala/modules/"
  // charset: "utf-8"
  // cid: function cid()
  // cwd: "http://www.seajs.dakala/"​
  // dir: "http://www.seajs.dakala/lib/"​
  // events: Object {  }​​
  // fetchedList: Object { "http://www.seajs.dakala/modules/test/a.js": true }​​
  // preload: Array []


  // 单个入口
  seajs.use('test/a', function(a) {
    // log(a); a 就是 test/a 模块内的exports（或者说 module.exports） 的值；
    // 如果 test/a 内没有给它们赋值，这里的a 就是空对象 {};
  });
  
  // 多个入口
  // seajs.use(['test/a', 'test/c'], function(a, c) {
  //   log(a);
  //   log(c);
  // });
  
  // 到这里就结结束了。
  // 
</script>
</body>
</html>